import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

// 1. 实现 Runnable 接口：计算 1~n 的累加和
class SumRunnable implements Runnable {
    private final int n;
    private int result; // 用共享变量存储结果（需注意线程安全）

    public SumRunnable(int n) {
        this.n = n;
    }

    // 2. 重写 run() 方法：无返回值，异常需内部捕获
    @Override
    public void run() {
        try {
            if (n < 1) {
                throw new IllegalArgumentException("n 必须大于 0"); // checked 异常需内部捕获
            }
            // 计算 1~n 的累加和
            for (int i = 1; i <= n; i++) {
                result += i;
            }
        } catch (IllegalArgumentException e) {
            System.out.println("任务异常：" + e.getMessage());
        }
    }

    // 3. 提供 getter 方法：获取计算结果（需确保任务执行完成后调用）
    public int getResult() {
        return result;
    }
}

// 测试 Runnable 任务
public class RunnableDemo {
    public static void main(String[] args) throws InterruptedException {
        // 创建 Runnable 任务（计算 1~100 的和）
        SumRunnable sumTask = new SumRunnable(100);

        // 方式1：用 Thread 执行
        Thread thread = new Thread(sumTask);
        thread.start();
        thread.join(); // 等待线程执行完成（否则可能获取到未计算完的结果）
        System.out.println("Runnable 计算结果（Thread）：" + sumTask.getResult()); // 输出 5050

        // 方式2：用线程池执行
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(sumTask); // 提交任务，返回 Future<?>（无实际结果）
        executor.shutdown();
        // 等待线程池执行完成后获取结果（此处简化，实际需用 executor.awaitTermination()）
        System.out.println("Runnable 计算结果（线程池）：" + sumTask.getResult()); // 输出 5050
    }
}